package ru.kreda.webapp.shared;

import com.google.gwt.user.client.rpc.IsSerializable;

/**
 * Ошибка с дополнительным полем, содержащем информацию о том, как с этой
 * ошибкой жить пользователю.
 */
public class AppException extends RuntimeException implements IsSerializable {
	private static final long serialVersionUID = -1268902638128789668L;
	private String stackTraceString;

	/**
	 * Конструктор для сериализации
	 */
	public AppException() {
		super();
	}

	/**
	 * Конструктор
	 * 
	 * @param message
	 *            сообщение об ошибке
	 */
	public AppException(String message) {
		super(message);
	}

	public String getStackTraceString() {
		return stackTraceString;
	}

	/**
	 * Создает ошибку с серверным stack trace
	 */
	public static AppException createClientException(Throwable cause, String stackTraceString) {
		String message = cause.getMessage();
		if (message == null) {
			message = cause.getClass().getName();
		}
		AppException exception = new AppException(message);
		exception.stackTraceString = stackTraceString;
		return exception;
	}

}
